package com.example.myapplication.base;

import androidx.annotation.AnimRes;
import androidx.annotation.AnimatorRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentTransaction;




public class UIFragmentTransaction {

    @Nullable
    private UITransitionAnimation mAnimation;

    /**
     * 创建新的Fragment跳转参数。
     */
    public UIFragmentTransaction() {
    }

    /**
     * 创建新的Fragment跳转参数。
     *
     * @param enter 进场动画ID。
     * @param exit  退场动画ID。
     */
    public UIFragmentTransaction(@AnimatorRes @AnimRes int enter,
                                 @AnimatorRes @AnimRes int exit) {
        setAnimation(enter, exit);
    }

    /**
     * 创建新的Fragment跳转参数。
     *
     * @param animation 过场动画。
     */
    public UIFragmentTransaction(UITransitionAnimation animation) {
        setAnimation(animation);
    }

    /**
     * 获取过场动画。
     *
     * @return 过场动画。
     */
    @Nullable
    public UITransitionAnimation getAnimation() {
        return mAnimation;
    }

    /**
     * 设置过场动画。
     *
     * @param enter 进场动画ID。
     * @param exit  退场动画ID。
     * @return 此对象，用于链式调用。
     */
    @NonNull
    public UIFragmentTransaction setAnimation(@AnimatorRes @AnimRes int enter,
                                              @AnimatorRes @AnimRes int exit) {
        mAnimation = new UITransitionAnimation(enter, exit);
        return this;
    }

    /**
     * 设置过场动画。
     *
     * @param animation 过场动画。
     * @return 此对象，用于链式调用。
     */
    @NonNull
    public UIFragmentTransaction setAnimation(@Nullable UITransitionAnimation animation) {
        mAnimation = animation;
        return this;
    }

    /**
     * 将参数填充到{@link FragmentTransaction}对象中。
     *
     * @param fragmentTransaction {@link FragmentTransaction}对象。
     */
    public void fillFragmentTransaction(@NonNull FragmentTransaction fragmentTransaction) {
        ArgUtils.checkNonNull("fragmentTransaction", fragmentTransaction);
        if (mAnimation != null) {
            mAnimation.fillFragmentTransaction(fragmentTransaction);
        }
    }

}
